package com.wangwei.activemq.hello;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.util.concurrent.TimeUnit;

/**
 * 生产者
 */
public class Sender {
    public static void main(String[] args) throws Exception{
        /**第一步：建立ConnectionFactory工厂对象，需要填入用户名、密码、连接的地址，均使用默认即可。*/
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnectionFactory.DEFAULT_USER,
                ActiveMQConnectionFactory.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        /**第二步：通过connectionFactory工厂对象创建一个Connection连接，并调用Connection的start()方法开启。Connection默认是关闭的***/
        Connection connection = connectionFactory.createConnection();
        connection.start();

        /**第三步：通过Connection创建Session会话(上下文环境对象)，用于发送接收消息，参数一：是否启用事物；参数二：签收模式，一般设置自动签收模式**/
        Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);

        /**第四步：通过Session创建Destination对象，指的是一个客户端用来指定生产消息目标和消费消息来源的对象。在PTP(点对点)中，
         * Destination被称作Queue(队列)，在发布/订阅模式中，Destination被称作Topic(主题)
         * **/
        Destination destination = session.createQueue("wangwei");

        /**第五步：通过Session创建消息的发送和接收对象(即生产者和消费者)，MessageProducer/MessageConsumer****/
        MessageProducer producer = session.createProducer(null);

        /**第六步：我们可以使用MessageProducer的setDeliveryMode()方法设置持久化特性和非持久化特性。****/
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

        /**第七步：使用JMS规范的TextMessage形式创建消息数据(通过session对象)。并使用
         * MessageProducer对象发送消息。同理消费者使用receive方法()接收
         * **/
        for(int i=1;i <= 50;i++){
            TextMessage textMessage = session.createTextMessage("王威爱胡英" + i + "次");

            /**
             * 参数1：目标地址
             * 参数2：具体的数据消息
             * 参数3：传送消息的模式
             * 参数4：优先级
             * 参数5：消息的过期时间
             * */
            producer.send(destination,textMessage);

            TimeUnit.SECONDS.sleep(1);
        }

        if(connection != null){
            connection.close();
        }
    }
}
